From 8183fb7b82f01d079d146a6d98ac8943e2ad5fc6 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Thu, 15 Mar 2007 10:43:13 +0000 Subject: [PATCH] Add two arch hooks to gnttab_release_mappings(). Signed-off-by: Isaku Yamahata --- xen/common/grant_table.c | 6 ++---- xen/include/asm-ia64/grant_table.h | 3 +++ xen/include/asm-powerpc/grant_table.h | 13 +++++++++++++ xen/include/asm-x86/grant_table.h | 10 ++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 1af842a528..2ea6ff37eb 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -1392,8 +1392,7 @@ gnttab_release_mappings( { BUG_ON(!(act->pin & GNTPIN_hstr_mask)); act->pin -= GNTPIN_hstr_inc; - /* Done implicitly when page tables are destroyed. */ - /* put_page(mfn_to_page(act->frame)); */ + gnttab_release_put_page(mfn_to_page(act->frame)); } } else @@ -1409,8 +1408,7 @@ gnttab_release_mappings( { BUG_ON(!(act->pin & GNTPIN_hstw_mask)); act->pin -= GNTPIN_hstw_inc; - /* Done implicitly when page tables are destroyed. */ - /* put_page_and_type(mfn_to_page(act->frame)); */ + gnttab_release_put_page_and_type(mfn_to_page(act->frame)); } if ( (act->pin & (GNTPIN_devw_mask|GNTPIN_hstw_mask)) == 0 ) diff --git a/xen/include/asm-ia64/grant_table.h b/xen/include/asm-ia64/grant_table.h index 45d7dac7e9..f10d92e419 100644 --- a/xen/include/asm-ia64/grant_table.h +++ b/xen/include/asm-ia64/grant_table.h @@ -64,4 +64,7 @@ static inline void gnttab_clear_flag(unsigned long nr, uint16_t *addr) clear_bit(nr, addr); } +#define gnttab_release_put_page(page) put_page((page)) +#define gnttab_release_put_page_and_type(page) put_page_and_type((page)) + #endif /* __ASM_GRANT_TABLE_H__ */ diff --git a/xen/include/asm-powerpc/grant_table.h b/xen/include/asm-powerpc/grant_table.h index 334a925cbb..e8ca87cbb4 100644 --- a/xen/include/asm-powerpc/grant_table.h +++ b/xen/include/asm-powerpc/grant_table.h @@ -69,4 +69,17 @@ static inline uint cpu_foreign_map_order(void) /* 16 GiB */ return 34 - PAGE_SHIFT; } + +#if 0 +/* + * without put_page()/put_page_and_type() page might be leaked. + * with put_page()/put_page_and_type() freed page might be accessed. + */ +#define gnttab_release_put_page(page) put_page((page)) +#define gnttab_release_put_page_and_type(page) put_page_and_type((page)) +#else +#define gnttab_release_put_page(page) do { } while (0) +#define gnttab_release_put_page_and_type(page) do { } while (0) +#endif + #endif /* __ASM_PPC_GRANT_TABLE_H__ */ diff --git a/xen/include/asm-x86/grant_table.h b/xen/include/asm-x86/grant_table.h index 32dc43b898..f0c49bac3b 100644 --- a/xen/include/asm-x86/grant_table.h +++ b/xen/include/asm-x86/grant_table.h @@ -38,4 +38,14 @@ static inline void gnttab_clear_flag(unsigned long nr, uint16_t *addr) clear_bit(nr, addr); } +#define gnttab_release_put_page(page) \ + do { \ + /* Done implicitly when page tables are destroyed. */ \ + } while (0) + +#define gnttab_release_put_page_and_type(page) \ + do { \ + /* Done implicitly when page tables are destroyed. */ \ + } while (0) + #endif /* __ASM_GRANT_TABLE_H__ */ -- 2.30.2